﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SGQ.Model;
using SGQ.Controller;
using SGQ.XML;

namespace SGQ.View
{
    public partial class FormManterMaterial : Form
    {

        public FormManterMaterial()
        {
            InitializeComponent();
            inti();
        }

        private ControllerDepartamento controlDpto;
        private ControllerMaterial controlMat;
        private Material mat;
        private int codigo;
        public SessionApplication Session {get; set;}
        private List<Material> mats;

        private void inti()
        {
            limpaLabels();
            controlDpto = new ControllerDepartamento();
            controlMat = new ControllerMaterial();
            mat = new Material();
            mat.Departamento = new Departamento();
            mats = new List<Material>();
            refresh();
        }
        
        private void refresh()
        {
            preecheDataGrid();
            preecheDptoCombo();
            limpaLabels();
        }

        private void preecheDptoCombo()
        {
            cbDepartament.DataSource = controlDpto.ListDataSet().Tables[0];
            cbDepartament.DisplayMember = "Descricao";
            cbDepartament.ValueMember = "Codigo";
        }

        private void preecheDataGrid()
        {
            dgUser.DataSource = controlMat.ListDataSet().Tables[0];
            mats = (List<Material>) dgUser.DataSource;
        }

        private void limpaLabels()
        {
            cbDepartament.SelectedIndex = -1;
            mtbDateStart.Text = null;
            tbTitulo.Text = null;
            rtbConteudo.Text = null;
            //cbDepartament.Items.Clear();
            this.codigo = -1;
        }

        private void pegaValores()
        {
            
            mat.Codigo = this.codigo;
            mat.Departamento.Codigo = int.Parse(cbDepartament.SelectedValue.ToString());
            mat.Departamento.Descricao = cbDepartament.Text;
            mat.Titulo = tbTitulo.Text;
            mat.Conteudo = rtbConteudo.Text;
            mat.Data = DateTime.Parse(mtbDateStart.Text);
        }

        private void inserirMat()
        {
            try
            {
                
                pegaValores();
                if (controlMat.Insert(mat) == true)
                {
                    MessageCliente.MessageClient("Registro Inserido Com Sucesso");
                }
                else
                {
                    MessageCliente.MessageClient("Registro Não Foi Inserido");
                }

                limpaLabels();
                refresh();
            }
            catch (Exception e)
            {
                MessageCliente.MessageClient(e.Message);
            }
        }

        private void atualizarMat()
        {
            try
            {
                pegaValores();
                if (controlMat.Update(mat) == true)
                {
                    MessageCliente.MessageClient("Registro Atualizado Com Sucesso");
                }
                else
                {
                    MessageCliente.MessageClient("Registro Não Foi Atualizado");
                }

                limpaLabels();
                refresh();
            }
            catch (Exception e)
            {
                MessageCliente.MessageClient(e.Message);
            }
        }

        private void removerMat()
        {
            try
            {
                pegaValores();
                if (controlMat.Delete(mat) == true)
                {
                    MessageCliente.MessageClient("Registro Removido Com Sucesso");
                }
                else
                {
                    MessageCliente.MessageClient("Registro Não Foi Removido");
                }

                limpaLabels();
                refresh();
            }
            catch (Exception e)
            {
                MessageCliente.MessageClient(e.Message);
            }
        }

        private void escolherMaterial(DataGridViewCellEventArgs e)
        {
            limpaLabels();
            mat.Codigo = int.Parse(dgUser.Rows[e.RowIndex].Cells[0].Value.ToString());
            mat.Departamento.Codigo = int.Parse(dgUser.Rows[e.RowIndex].Cells[1].Value.ToString());
            mat.Data = DateTime.Parse(dgUser.Rows[e.RowIndex].Cells[2].Value.ToString());
            mat.Titulo = dgUser.Rows[e.RowIndex].Cells[3].Value.ToString();
            mat.Conteudo = dgUser.Rows[e.RowIndex].Cells[4].Value.ToString();
            mat.Usuario.Codigo = int.Parse(dgUser.Rows[e.RowIndex].Cells[5].Value.ToString());
            preencheLabels();
        }

        private void preencheLabels()
        {
            this.codigo = mat.Codigo;
            cbDepartament.SelectedValue = mat.Departamento.Codigo;
            tbTitulo.Text = mat.Titulo;
            rtbConteudo.Text = mat.Conteudo;
            mtbDateStart.Text = mat.Data.ToString();
        }

        private void FormManterMaterial_Load(object sender, EventArgs e)
        {
            mat.Usuario = Session.Usuario;
            refresh();
        }

        private void btSerializarMat()
        {
            XMLWrite.WriteXML(mats);
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void btOK_Click(object sender, EventArgs e)
        {
            pegaValores();
        }

        private void btListar_Click(object sender, EventArgs e)
        {
            refresh();
        }

        private void tbAddMaterial_Click(object sender, EventArgs e)
        {
            inserirMat();
        }

        private void btUpdateMaterial_Click(object sender, EventArgs e)
        {
            atualizarMat();
        }

        private void btRemover_Click(object sender, EventArgs e)
        {
            removerMat();
        }

        private void dgUser_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            escolherMaterial(e);
        }

        private void btSerializar_Click(object sender, EventArgs e)
        {
            btSerializarMat();
        }
    }
}
